package it.polimi.traveldream.persistence;

import java.io.Serializable;

import javax.persistence.*;
import javax.validation.constraints.NotNull;

import java.util.LinkedList;
import java.util.List;


/**
 * The persistent class for the pacchetto database table.
 * 
 */
@Entity
@NamedQueries({
@NamedQuery(name="Pacchetto.findAll", query="SELECT p FROM Pacchetto p"),
@NamedQuery(name="Pacchetto.findPub", query="SELECT p FROM Pacchetto p WHERE p.pubblico = TRUE")
}
)
public class Pacchetto implements Serializable {
	private static final long serialVersionUID = 1L;

	public static final String FIND_ALL = "Pacchetto.findAll";
	public static final String FIND_PUB = "Pacchetto.findPub";

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int IDPacchetto;
	
	
	private boolean pubblico;

	@NotNull
	private String descrizione;

	@NotNull
	private String nome;

	//bi-directional many-to-one association to PacchettoPersonalizzato
	@OneToMany(mappedBy="pacchetto")
	private List<PacchettoPersonalizzato> pacchettoPersonalizzatos = new LinkedList<PacchettoPersonalizzato>();

	//bi-directional many-to-one association to Utente
	@ManyToOne
	@JoinColumn(name="EmailImpiegato")
	private Utente utente;

	//bi-directional many-to-one association to PonteHotelPacchetto

	@OneToMany(mappedBy="pacchetto", cascade=CascadeType.ALL)
	private List<PonteHotelPacchetto> ponteHotelPacchettos = new LinkedList<PonteHotelPacchetto>();


	//bi-directional many-to-one association to PonteTourPacchetto
	@OneToMany(mappedBy="pacchetto", cascade=CascadeType.ALL)
	private List<PonteTourPacchetto> ponteTourPacchettos= new LinkedList<PonteTourPacchetto>();

	//bi-directional many-to-one association to PonteTrattaPacchetto
	@OneToMany(mappedBy="pacchetto", cascade=CascadeType.ALL)
	private List<PonteTrattaPacchetto> ponteTrattaPacchettos= new LinkedList<PonteTrattaPacchetto>();

	public Pacchetto() {
		IDPacchetto=0;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescrizione() {
		return descrizione;
	}

	public void setDescrizione(String descrizione) {
		this.descrizione = descrizione;
	}

	public int getID() {
		return this.IDPacchetto;
	}
	
	public int getIDPacchetto() {
		return this.IDPacchetto;
	}

	public void setIDPacchetto(int IDPacchetto) {
		this.IDPacchetto = IDPacchetto;
	}

	public boolean getPubblico() {
		return this.pubblico;
	}

	public void setPubblico(boolean pubblico) {
		this.pubblico = pubblico;
	}

	public List<PacchettoPersonalizzato> getPacchettoPersonalizzatos() {
		return this.pacchettoPersonalizzatos;
	}

	public void setPacchettoPersonalizzatos(List<PacchettoPersonalizzato> pacchettoPersonalizzatos) {
		this.pacchettoPersonalizzatos = pacchettoPersonalizzatos;
	}

	public PacchettoPersonalizzato addPacchettoPersonalizzato(PacchettoPersonalizzato pacchettoPersonalizzato) {
		getPacchettoPersonalizzatos().add(pacchettoPersonalizzato);
		pacchettoPersonalizzato.setPacchetto(this);

		return pacchettoPersonalizzato;
	}

	public PacchettoPersonalizzato removePacchettoPersonalizzato(PacchettoPersonalizzato pacchettoPersonalizzato) {
		getPacchettoPersonalizzatos().remove(pacchettoPersonalizzato);
		pacchettoPersonalizzato.setPacchetto(null);

		return pacchettoPersonalizzato;
	}

	public Utente getUtente() {
		return this.utente;
	}

	public void setUtente(Utente utente) {
		this.utente = utente;
	}

	public List<PonteHotelPacchetto> getPonteHotelPacchettos() {
		return this.ponteHotelPacchettos;
	}

	public void setPonteHotelPacchettos(List<PonteHotelPacchetto> ponteHotelPacchettos) {
		this.ponteHotelPacchettos = ponteHotelPacchettos;
	}

	public PonteHotelPacchetto addPonteHotelPacchetto(PonteHotelPacchetto ponteHotelPacchetto) {
		getPonteHotelPacchettos().add(ponteHotelPacchetto);
		ponteHotelPacchetto.setPacchetto(this);

		return ponteHotelPacchetto;
	}

	public PonteHotelPacchetto removePonteHotelPacchetto(PonteHotelPacchetto ponteHotelPacchetto) {
		getPonteHotelPacchettos().remove(ponteHotelPacchetto);
		ponteHotelPacchetto.setPacchetto(null);

		return ponteHotelPacchetto;
	}

	public List<PonteTourPacchetto> getPonteTourPacchettos() {
		return this.ponteTourPacchettos;
	}

	public void setPonteTourPacchettos(List<PonteTourPacchetto> ponteTourPacchettos) {
		this.ponteTourPacchettos = ponteTourPacchettos;
	}

	public PonteTourPacchetto addPonteTourPacchetto(PonteTourPacchetto ponteTourPacchetto) {
		getPonteTourPacchettos().add(ponteTourPacchetto);
		ponteTourPacchetto.setPacchetto(this);

		return ponteTourPacchetto;
	}

	public PonteTourPacchetto removePonteTourPacchetto(PonteTourPacchetto ponteTourPacchetto) {
		getPonteTourPacchettos().remove(ponteTourPacchetto);
		ponteTourPacchetto.setPacchetto(null);

		return ponteTourPacchetto;
	}

	public List<PonteTrattaPacchetto> getPonteTrattaPacchettos() {
		return this.ponteTrattaPacchettos;
	}

	public void setPonteTrattaPacchettos(List<PonteTrattaPacchetto> ponteTrattaPacchettos) {
		this.ponteTrattaPacchettos = ponteTrattaPacchettos;
	}

	public PonteTrattaPacchetto addPonteTrattaPacchetto(PonteTrattaPacchetto ponteTrattaPacchetto) {
		getPonteTrattaPacchettos().add(ponteTrattaPacchetto);
		ponteTrattaPacchetto.setPacchetto(this);

		return ponteTrattaPacchetto;
	}

	public PonteTrattaPacchetto removePonteTrattaPacchetto(PonteTrattaPacchetto ponteTrattaPacchetto) {
		getPonteTrattaPacchettos().remove(ponteTrattaPacchetto);
		ponteTrattaPacchetto.setPacchetto(null);

		return ponteTrattaPacchetto;
	}
}